package com.source.lightfowl.labelingRecord.controller;

import com.source.lightfowl.VO.BarcodeCountVO;
import com.source.lightfowl.labelingRecord.pojo.Record;
import com.source.lightfowl.labelingRecord.pojo.vo.Info;
import com.source.lightfowl.labelingRecord.service.RecordService;
import com.source.lightfowl.syslog.annotation.LogAnnotation;
import com.source.lightfowl.utils.MyResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.math.BigInteger;
import java.util.List;

/**
 * 控制器层
 *
 * @author Administrator
 */
@Api(tags = "贴标管理")
@RestController
@CrossOrigin
@RequestMapping("/record")
public class RecordController {

    @Autowired
    private RecordService recordService;

    /**
     * 查询
     *
     * @return
     */
    //to do   组合查询 (测试通过 10_2)
    //
    //1. 添加全部档口的count 近一个月 （完成） (测试通过)
    //2. 联系人  档口名  （完成） （测试通过）
    //3. 保存图片的目录 (完成)  （没测试）

    /*
    SELECT a.`LabelingDate` FROM labeling_record a
    WHERE  a.`LabelingDate` >=  '2020-08-10'
    AND a.`LabelingDate` <= '2020-08-31'
     */
    @ApiOperation(value = "根据档口名字或者联系人的名字模糊匹配 查询某个时间段贴标的数量 时间格式2020-08-10")
    @GetMapping("/record/count")
    public MyResult findByNameAndTime(String name,String startDate,String endDate) {
        List<BarcodeCountVO> all = recordService.findByNameAndTime(name,startDate,endDate);
        return MyResult.ok(all);
    }

    @ApiOperation(value = "根据档口名字或者联系人的名字模糊匹配 查询某个时间段贴标的数量 时间格式2020-08-10")
    @GetMapping("/record/count2")
    public MyResult findByNameAndTime2(String stallName,String linkName,String startDate,String endDate) {
        List<BarcodeCountVO> all = recordService.findByNameAndTime(stallName,linkName,startDate,endDate);
        return MyResult.ok(all);
    }

    //to do 默认全部档口一个月  (测试通过 10_2)
    /*
    SELECT a.`LabelingDate` FROM labeling_record a
    WHERE  a.`LabelingDate` >=  '2020-08-10'
    AND a.`LabelingDate` <= '2020-08-31'
     */
    @ApiOperation(value = "默认查全部档口一个月的条码")
    @GetMapping("/record/countDef")
    public MyResult findByNameAndTimeDef() {
        List<BarcodeCountVO> all = recordService.findByNameAndTime();
        return MyResult.ok(all);
    }


    //to do 默认全部档口一个月 不细分档口
    /*
    SELECT a.`LabelingDate` FROM labeling_record a
    WHERE  a.`LabelingDate` >=  '2020-08-10'
    AND a.`LabelingDate` <= '2020-08-31'
     */
    @ApiOperation(value = "默认查全部档口一个月的条码")
    @GetMapping("/record/countDef2")
    public MyResult findByNameAndTimeDef2() {
        BarcodeCountVO all = recordService.findByNameAndTime2(); //原本的默认一个档口count一次现在全部档口count一次
        return MyResult.ok(all);
    }

    /**
     * 查询全部数据
     *
     * @return
     */
    @ApiOperation(value = "查询全部数据")
    @GetMapping
    public MyResult findAll() {
        return MyResult.ok(recordService.findAll());
    }

    @ApiOperation(value = "分页查询全部数据")
    @GetMapping(value = "/all/{page}/{size}")
    public MyResult findAll(@PathVariable int page, @PathVariable int size) {
        return MyResult.build(0, "查询成功", recordService.findAll(page, size));
    }

    /**
     * 根据ID查询
     *
     * @param id ID
     * @return
     */
    @ApiOperation(value = "根据id查询数据")
    @GetMapping(value = "/{id}")
    public MyResult findById(@PathVariable BigInteger id) {
        return MyResult.ok(recordService.findById(id));
    }


    /**
     * 增加
     *
     * @param record
     */
    @ApiOperation(value = "增加")
    @PostMapping
    @LogAnnotation(operEvent = "操作类型：添加", operType = 1)
    public MyResult add(Record record) {
        recordService.add(record);
        return MyResult.ok();
    }

    /**
     * 修改
     *
     * @param record
     */
    @ApiOperation(value = "修改")
    @PutMapping(value = "/{id}")
    @LogAnnotation(operEvent = "操作类型：修改", operType = 2)
    public MyResult update(Record record, @PathVariable String id) {
        recordService.update(record);
        return MyResult.ok();
    }

    /**
     * 删除
     *
     * @param id
     */
    @ApiOperation(value = "删除")
    @DeleteMapping(value = "/{id}")
    @LogAnnotation(operEvent = "操作类型：删除记录", operType = 3)
    public MyResult delete(@PathVariable BigInteger id) {
        recordService.deleteById(id);
        return MyResult.ok();
    }

    /**
     * 二维码扫描，产品溯源
     * @param barcodeNumber 根据id溯源
     */
    @ApiOperation("二维码溯源")
    @GetMapping("getInfoById/{barcodeNumber}")
    public MyResult getInfoById(@PathVariable String barcodeNumber){
        Info info = recordService.getInfo(barcodeNumber);
        return MyResult.build(200,"查询成功",info);
    }
}
